/**
 * Esta classe tem como objetivo criar objetos do tipo armamento, tanto armas de
 * ataque como armamento de defesa. Cada objeto tera um complemento, uma
 * durabilidade e um tipo alem das caracteristicas herdadas da sua super classe
 * Recurso.
 */
package rpg.recurso;

/**
 * @author Douglas
 * @since 04/01/13
 * @version 0.5
 */
public class Armamento extends Recurso {
    //Atributos

    private int complemento;
    private int durabilidade;
    private int peso;
    private TipoArmamento tipo;
    private Peca peca;

    /**
     * Metodo contrutor
     *
     * @param nome
     * @param quantidade
     * @param complemento
     * @param durabilidade
     * @param tipo
     */
    public Armamento(String nome, int quantidade, int complemento, int durabilidade, TipoArmamento tipo) {
        super(nome, quantidade);
        setComplemento(complemento);
        setDurabilidade(durabilidade);
        setTipo(tipo);
    }

    /*
     * Encapsulamento dos atributos.
     */
    public int getComplemento() {
        return complemento;
    }

    public void setComplemento(int complemento) {
        this.complemento = complemento;
    }

    public int getDurabilidade() {
        return durabilidade;
    }

    public void setDurabilidade(int durabilidade) {
        this.durabilidade = durabilidade;
    }

    public TipoArmamento getTipo() {
        return tipo;
    }

    public void setTipo(TipoArmamento tipo) {
        this.tipo = tipo;
    }

    public Peca getPeca() {
        return peca;
    }

    public void setPeca(Peca peca) {
        this.peca = peca;
    }

    public int getPeso() {
        return peso;
    }

    public void setPeso(int peso) {
        this.peso = peso;
    }

    /**
     * Recebe uma peça e caso a mesma seja do mesmo tipo do armamento
     * complementa no valor e retorna um valor true, caso nao seja ou retorna um
     * valor false.
     *
     * @param peca
     * @return
     */
    public boolean adicionarPeca(Peca peca) {
        if (this.peca == null) {
            if (getTipo().equals(peca.getTipo())) {
                this.setComplemento(getComplemento() + peca.getComplemento());
                setNome(getNome() + " com " + peca.getNome());
                setPeca(peca);
                return true;
            } else {
                return false;
            }
        } else {
            //diminui complemento aumentado da arma e troca o nome
            this.setComplemento(getComplemento() - this.getPeca().getComplemento());
            this.setNome(getNome().replaceAll(" com " + getPeca().getNome(), ""));
            setPeca(peca);

            //aumenta complemento com nova peca adicionada
            this.setComplemento(getComplemento() + peca.getComplemento());
            setNome(getNome() + " com " + peca.getNome());
            return true;
        }
    }

    /**
     * Verifica a durabilidade do armamento, caso este armamente esteja com sua
     * durabilidade acabada, o metodo tirara o complemento(forca, defesa) do
     * armamento.
     */
    public void verificarDurabilidade() {
        if (getDurabilidade() <= 0) {
            setComplemento(0);
        }
    }
}
